﻿Imports System.Data
Imports System.Data.Odbc
Imports System.Text
Imports System.Collections.Generic
Imports WSEntidades
Imports Utilerias
Imports WSFactory
Imports MySql.Data.MySqlClient

Public Class ParamEmiDAL
    Private cadConex As String = ""

    Public Sub New(ByVal pCadConex As String)
        Me.cadConex = pCadConex
    End Sub

#Region "FuncionesUtilizables"

    Public Function registraParamEmi(ByVal pParamEmi As ParametrosEmisionBE, ByRef idParamEmi As Integer) As Boolean
        Try
            Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
                Using myComm As MySqlCommand = myConn.CreateCommand()
                    myComm.CommandText = "INSERT INTO paramemi(Descuentos, InfoAduanera, NumSerie, DecCantidades, DecImpuestos, DecPrecios, " & _
                        "DecTotales, UsuarioTim, PassTim, EnviaCompAuto, UsaMailPropio, CorreoElectronico, Pass, SMTP, " & _
                        "Puerto, usaSSL) " & _
                        "VALUES (@Descuentos, @InfoAduanera, @NumSerie, @DecCantidades, @DecImpuestos, @DecPrecios, " & _
                        "@DecTotales, @UsuarioTim, @PassTim, @EnviaCompAuto, @UsaMailPropio, @CorreoElectronico, @Pass, @SMTP, " & _
                        "@Puerto, @usaSSL);"
                    myComm.CommandType = System.Data.CommandType.Text
                    myComm.Parameters.Clear()
                    Select Case pParamEmi.Descuentos
                        Case ParametrosEmisionBE.DescuentosParam.Documento
                            myComm.Parameters.AddWithValue("@Descuentos", "D")
                        Case ParametrosEmisionBE.DescuentosParam.Partida
                            myComm.Parameters.AddWithValue("@Descuentos", "P")
                        Case ParametrosEmisionBE.DescuentosParam.Cliente
                            myComm.Parameters.AddWithValue("@Descuentos", "C")
                        Case ParametrosEmisionBE.DescuentosParam.No_Aplica
                            myComm.Parameters.AddWithValue("@Descuentos", "N")
                    End Select
                    Select Case pParamEmi.InfoAduanera
                        Case ParametrosEmisionBE.InfoAduaneraParam.Documento
                            myComm.Parameters.AddWithValue("@InfoAduanera", "D")
                        Case ParametrosEmisionBE.InfoAduaneraParam.Partida
                            myComm.Parameters.AddWithValue("@InfoAduanera", "P")
                        Case ParametrosEmisionBE.InfoAduaneraParam.No_Incluye
                            myComm.Parameters.AddWithValue("@InfoAduanera", "N")
                    End Select
                    Select Case pParamEmi.NumSerie
                        Case ParametrosEmisionBE.NumSerieParam.Requeridos
                            myComm.Parameters.AddWithValue("@NumSerie", "R")
                        Case ParametrosEmisionBE.NumSerieParam.Opcionales
                            myComm.Parameters.AddWithValue("@NumSerie", "O")
                        Case ParametrosEmisionBE.NumSerieParam.No_Incluye
                            myComm.Parameters.AddWithValue("@NumSerie", "N")
                    End Select
                    myComm.Parameters.AddWithValue("@DecCantidades", pParamEmi.DecimalesEnCantidades)
                    myComm.Parameters.AddWithValue("@DecImpuestos", pParamEmi.DecimalesEnImpuestos)
                    myComm.Parameters.AddWithValue("@DecPrecios", pParamEmi.DecimalesEnPrecios)
                    myComm.Parameters.AddWithValue("@DecTotales", pParamEmi.DecimalesEnTotales)
                    myComm.Parameters.AddWithValue("@UsuarioTim", pParamEmi.UsuarioTimbrado)
                    myComm.Parameters.AddWithValue("@PassTim", pParamEmi.PassTimbrado)
                    myComm.Parameters.AddWithValue("@EnviaCompAuto", pParamEmi.EnviaComprobantesAutomaticamente)
                    myComm.Parameters.AddWithValue("@UsaMailPropio", pParamEmi.UsaMailPropio)
                    myComm.Parameters.AddWithValue("@CorreoElectronico", pParamEmi.CorreoElectronico)
                    myComm.Parameters.AddWithValue("@Pass", pParamEmi.PassMail)
                    myComm.Parameters.AddWithValue("@SMTP", pParamEmi.SMTP)
                    myComm.Parameters.AddWithValue("@Puerto", pParamEmi.Puerto)
                    myComm.Parameters.AddWithValue("@usaSSL", pParamEmi.SSL)
                    myConn.Open()
                    If (myComm.ExecuteNonQuery() = 1) Then
                        myComm.CommandText = "SELECT @@identity; "
                        IdParamEmi = CType(myComm.ExecuteScalar(), Int32)
                        Return True
                    Else
                        Return False
                    End If
                End Using
            End Using
        Catch ex As Exception
            Throw
        End Try
    End Function

    Public Function registraParamEmiPrede(ByVal pParamEmiPrede As ParametrosEmisionPredeterminadosBE, ByVal pIdParamEmi As Integer) As Boolean
        Try
            Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
                Using myComm As MySqlCommand = myConn.CreateCommand()
                    myComm.CommandText = "INSERT INTO paramemiprede(IdParamEmi, Emite, UdeM, FormaPago, MetodoPago, CondicionesPago, " & _
                        "TituloNumSerie, TituloMotivoDesc, TituloPorcDesc, CambiarPassAcceso, ModificarCantCalculos, PersonalizacionMuni, " & _
                        "AduanaPredet, NumAduana, FechaAduana, Aduana) " & _
                        "VALUES (@IdParamEmi, @Emite, @UdeM, @FormaPago, @MetodoPago, @CondicionesPago, " & _
                        "@TituloNumSerie, @TituloMotivoDesc, @TituloPorcDesc, @CambiarPassAcceso, @ModificarCantCalculos, @PersonalizacionMuni, " & _
                        "@AduanaPredet, @NumAduana, @FechaAduana, @Aduana);"
                    myComm.CommandType = System.Data.CommandType.Text
                    myComm.Parameters.Clear()
                    myComm.Parameters.AddWithValue("@IdParamEmi", pIdParamEmi)
                    myComm.Parameters.AddWithValue("@Emite", pParamEmiPrede.Emite)
                    myComm.Parameters.AddWithValue("@UdeM", pParamEmiPrede.UdeM)
                    myComm.Parameters.AddWithValue("@FormaPago", pParamEmiPrede.FormaPago)
                    myComm.Parameters.AddWithValue("@MetodoPago", pParamEmiPrede.MetodoPago)
                    myComm.Parameters.AddWithValue("@CondicionesPago", pParamEmiPrede.CondicionesPago)
                    myComm.Parameters.AddWithValue("@TituloNumSerie", pParamEmiPrede.TituloNumSerie)
                    myComm.Parameters.AddWithValue("@TituloMotivoDesc", pParamEmiPrede.TituloMotivoDesc)
                    myComm.Parameters.AddWithValue("@TituloPorcDesc", pParamEmiPrede.TituloPorcDesc)
                    myComm.Parameters.AddWithValue("@CambiarPassAcceso", pParamEmiPrede.CambiarPassAcceso)
                    myComm.Parameters.AddWithValue("@ModificarCantCalculos", pParamEmiPrede.ModificarCantCalculos)
                    myComm.Parameters.AddWithValue("@PersonalizacionMuni", pParamEmiPrede.PersonalizacionMuni)
                    myComm.Parameters.AddWithValue("@AduanaPredet", pParamEmiPrede.AduanaPredet)
                    myComm.Parameters.AddWithValue("@NumAduana", pParamEmiPrede.NumAduana)
                    myComm.Parameters.AddWithValue("@FechaAduana", pParamEmiPrede.FechaAduana)
                    myComm.Parameters.AddWithValue("@Aduana", pParamEmiPrede.Aduana)
                    myConn.Open()
                    If (myComm.ExecuteNonQuery() = 1) Then
                        Return True
                    Else
                        Return False
                    End If
                End Using
            End Using
        Catch ex As Exception
            Throw
        End Try
    End Function

    Public Function actualizaParamEmi(ByVal pParamEmi As ParametrosEmisionBE) As Boolean
        Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
            Using myComm As MySqlCommand = myConn.CreateCommand()
                myComm.CommandText = "UPDATE paramemi " & _
                                        "SET Descuentos = @Descuentos, InfoAduanera = @InfoAduanera, NumSerie = @NumSerie, DecCantidades = @DecCantidades, " & _
                                            "DecImpuestos = @DecImpuestos, DecPrecios = @DecPrecios, DecTotales = @DecTotales, " & _
                                            "UsuarioTim = @UsuarioTim, PassTim = @PassTim, EnviaCompAuto = @EnviaCompAuto, " & _
                                            "UsaMailPropio = @UsaMailPropio, CorreoElectronico = @CorreoElectronico, Pass = @Pass, " & _
                                            "SMTP = @SMTP, Puerto = @Puerto, usaSSL = @usaSSL " & _
                                            "; "
                myComm.CommandType = CommandType.Text
                myComm.Parameters.Clear()
                Select Case pParamEmi.Descuentos
                    Case ParametrosEmisionBE.DescuentosParam.Documento
                        myComm.Parameters.AddWithValue("@Descuentos", "D")
                    Case ParametrosEmisionBE.DescuentosParam.Partida
                        myComm.Parameters.AddWithValue("@Descuentos", "P")
                    Case ParametrosEmisionBE.DescuentosParam.Cliente
                        myComm.Parameters.AddWithValue("@Descuentos", "C")
                    Case ParametrosEmisionBE.DescuentosParam.No_Aplica
                        myComm.Parameters.AddWithValue("@Descuentos", "N")
                End Select
                Select Case pParamEmi.InfoAduanera
                    Case ParametrosEmisionBE.InfoAduaneraParam.Documento
                        myComm.Parameters.AddWithValue("@InfoAduanera", "D")
                    Case ParametrosEmisionBE.InfoAduaneraParam.Partida
                        myComm.Parameters.AddWithValue("@InfoAduanera", "P")
                    Case ParametrosEmisionBE.InfoAduaneraParam.No_Incluye
                        myComm.Parameters.AddWithValue("@InfoAduanera", "N")
                End Select
                Select Case pParamEmi.NumSerie
                    Case ParametrosEmisionBE.NumSerieParam.Requeridos
                        myComm.Parameters.AddWithValue("@NumSerie", "R")
                    Case ParametrosEmisionBE.NumSerieParam.Opcionales
                        myComm.Parameters.AddWithValue("@NumSerie", "O")
                    Case ParametrosEmisionBE.NumSerieParam.No_Incluye
                        myComm.Parameters.AddWithValue("@NumSerie", "N")
                End Select
                myComm.Parameters.AddWithValue("@DecCantidades", pParamEmi.DecimalesEnCantidades)
                myComm.Parameters.AddWithValue("@DecImpuestos", pParamEmi.DecimalesEnImpuestos)
                myComm.Parameters.AddWithValue("@DecPrecios", pParamEmi.DecimalesEnPrecios)
                myComm.Parameters.AddWithValue("@DecTotales", pParamEmi.DecimalesEnTotales)
                myComm.Parameters.AddWithValue("@UsuarioTim", pParamEmi.UsuarioTimbrado)
                myComm.Parameters.AddWithValue("@PassTim", RijndaelSimple.encriptaDefault(pParamEmi.PassTimbrado))
                myComm.Parameters.AddWithValue("@EnviaCompAuto", pParamEmi.EnviaComprobantesAutomaticamente)
                myComm.Parameters.AddWithValue("@UsaMailPropio", pParamEmi.UsaMailPropio)
                myComm.Parameters.AddWithValue("@CorreoElectronico", pParamEmi.CorreoElectronico)
                myComm.Parameters.AddWithValue("@Pass", RijndaelSimple.encriptaDefault(pParamEmi.PassMail))
                myComm.Parameters.AddWithValue("@SMTP", pParamEmi.SMTP)
                myComm.Parameters.AddWithValue("@Puerto", pParamEmi.Puerto)
                myComm.Parameters.AddWithValue("@usaSSL", pParamEmi.SSL)
                'myComm.Parameters.AddWithValue("@IdParamEmi", pParamEmi.IdParamEmi)
                myConn.Open()
                If (myComm.ExecuteNonQuery() >= 1) Then
                    Return True
                Else
                    Return False
                End If
            End Using
        End Using
    End Function

    Public Function actualizaParamEmiPrede(ByVal pParamEmiPrede As ParametrosEmisionPredeterminadosBE) As Boolean
        Try
            Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
                Using myComm As MySqlCommand = myConn.CreateCommand()
                    myComm.CommandText = "UPDATE paramemiprede " & _
                                            "SET Emite = @Emite, UdeM = @UdeM, FormaPago = @FormaPago, " & _
                                                "MetodoPago = @MetodoPago, CondicionesPago = @CondicionesPago, TituloNumSerie = @TituloNumSerie, " & _
                                                "TituloMotivoDesc = @TituloMotivoDesc, TituloPorcDesc = @TituloPorcDesc, CambiarPassAcceso = @CambiarPassAcceso, " & _
                                                "ModificarCantCalculos = @ModificarCantCalculos, PersonalizacionMuni = @PersonalizacionMuni, AduanaPredet = @AduanaPredet, " & _
                                                "NumAduana = @NumAduana, FechaAduana = @FechaAduana, Aduana= @Aduana " & _
                                                "; "
                    myComm.CommandType = CommandType.Text
                    myComm.Parameters.Clear()
                    myComm.Parameters.AddWithValue("@Emite", pParamEmiPrede.Emite)
                    myComm.Parameters.AddWithValue("@UdeM", pParamEmiPrede.UdeM)
                    myComm.Parameters.AddWithValue("@FormaPago", pParamEmiPrede.FormaPago)
                    myComm.Parameters.AddWithValue("@MetodoPago", pParamEmiPrede.MetodoPago)
                    myComm.Parameters.AddWithValue("@CondicionesPago", pParamEmiPrede.CondicionesPago)
                    myComm.Parameters.AddWithValue("@TituloNumSerie", pParamEmiPrede.TituloNumSerie)
                    myComm.Parameters.AddWithValue("@TituloMotivoDesc", pParamEmiPrede.TituloMotivoDesc)
                    myComm.Parameters.AddWithValue("@TituloPorcDesc", pParamEmiPrede.TituloPorcDesc)
                    Select Case pParamEmiPrede.CambiarPassAcceso
                        Case ParametrosEmisionPredeterminadosBE.FrecuenciaCambioPwd.Mensual
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "1")
                        Case ParametrosEmisionPredeterminadosBE.FrecuenciaCambioPwd.Bimestral
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "2")
                        Case ParametrosEmisionPredeterminadosBE.FrecuenciaCambioPwd.Trimestral
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "3")
                        Case ParametrosEmisionPredeterminadosBE.FrecuenciaCambioPwd.Semestral
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "6")
                        Case ParametrosEmisionPredeterminadosBE.FrecuenciaCambioPwd.Anual
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "12")
                        Case ParametrosEmisionPredeterminadosBE.FrecuenciaCambioPwd.No_Aplica
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "0")
                        Case Else
                            myComm.Parameters.AddWithValue("@CambiarPassAcceso", "1")
                    End Select
                    myComm.Parameters.AddWithValue("@ModificarCantCalculos", Conversiones.convertBoolToSN(pParamEmiPrede.ModificarCantCalculos))
                    myComm.Parameters.AddWithValue("@PersonalizacionMuni", pParamEmiPrede.PersonalizacionMuni)
                    myComm.Parameters.AddWithValue("@AduanaPredet", pParamEmiPrede.AduanaPredet)
                    myComm.Parameters.AddWithValue("@NumAduana", pParamEmiPrede.NumAduana)
                    myComm.Parameters.AddWithValue("@FechaAduana", pParamEmiPrede.FechaAduana)
                    myComm.Parameters.AddWithValue("@Aduana", pParamEmiPrede.Aduana)
                    myConn.Open()
                    If (myComm.ExecuteNonQuery() >= 1) Then
                        Return True
                    Else
                        Return False
                    End If
                End Using
            End Using
        Catch ex As Exception
            Throw
        End Try
    End Function

    Public Function getParamEmi() As ParametrosEmisionBE
        Dim tmpParamEmi As ParametrosEmisionBE
        Try
            Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
                Using myComm As MySqlCommand = myConn.CreateCommand()
                    myComm.CommandText = "SELECT IdParamEmi, Descuentos, InfoAduanera, NumSerie, DecCantidades, DecImpuestos, " & _
                                                "DecPrecios, DecTotales, UsuarioTim, PassTim, EnviaCompAuto, UsaMailPropio, CorreoElectronico, Pass, " & _
                                                "SMTP, Puerto, usaSSL " & _
                                            "FROM paramemi " & _
                                            "ORDER BY IdParamEmi ASC " &
                                            "LIMIT 1 ;"
                    myComm.CommandType = CommandType.Text
                    myConn.Open()
                    Using myDR As MySqlDataReader = myComm.ExecuteReader()
                        If (myDR.HasRows()) Then
                            myDR.Read()
                            tmpParamEmi = ParamEmiFact.Build(myDR)
                        Else
                            tmpParamEmi = Nothing
                        End If
                    End Using
                End Using
            End Using
            Return tmpParamEmi

        Catch ex As Exception
            Throw
        Finally
            tmpParamEmi = Nothing
        End Try
    End Function

    Public Function getConfiguracionDecimales(ByRef decEnCantidades As Int16, ByRef decEnPrecios As Int16,
                                              ByRef decEnImpuestos As Int16, ByRef decEnTotales As Int16) As Boolean
        Dim tmpParamEmi As ParametrosEmisionBE
        Try
            Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
                Using myComm As MySqlCommand = myConn.CreateCommand()
                    myComm.CommandText = "SELECT DecCantidades, DecImpuestos, DecPrecios, DecTotales " & _
                                            "FROM paramemi " & _
                                            "ORDER BY IdParamEmi ASC " &
                                            "LIMIT 1 ;"
                    myComm.CommandType = CommandType.Text
                    myConn.Open()
                    Using myDR As MySqlDataReader = myComm.ExecuteReader()
                        If (myDR.HasRows()) Then
                            myDR.Read()
                            tmpParamEmi = ParamEmiFact.buildConfigDecimales(myDR)
                            If (tmpParamEmi IsNot Nothing) Then
                                decEnCantidades = tmpParamEmi.DecimalesEnCantidades
                                decEnImpuestos = tmpParamEmi.DecimalesEnImpuestos
                                decEnPrecios = tmpParamEmi.DecimalesEnPrecios
                                decEnTotales = tmpParamEmi.DecimalesEnTotales
                                Return True
                            Else
                                Return False
                            End If
                        Else
                            Return False
                        End If
                    End Using
                End Using
            End Using

        Catch ex As Exception
            Throw
        End Try
    End Function

    Public Function getParamEmiPrede() As ParametrosEmisionPredeterminadosBE
        Dim tmpParamEmiPrede As ParametrosEmisionPredeterminadosBE
        Try
            Using myConn As MySqlConnection = New MySqlConnection(Me.cadConex)
                Using myComm As MySqlCommand = myConn.CreateCommand()
                    myComm.CommandText = "SELECT IdParamEmiPrede, IdParamEmi, Emite, UdeM, FormaPago, MetodoPago, CondicionesPago, " & _
                                                "TituloNumSerie, TituloMotivoDesc, TituloPorcDesc, CambiarPassAcceso, ModificarCantCalculos, " &
                                                "PersonalizacionMuni, AduanaPredet, NumAduana, FechaAduana, " & _
                                                "Aduana " & _
                                            "FROM paramemiprede " & _
                                            "ORDER BY IdParamEmiPrede ASC " &
                                            "LIMIT 1 ;"
                    myComm.CommandType = CommandType.Text
                    myConn.Open()
                    Using myDR As MySqlDataReader = myComm.ExecuteReader()
                        If (myDR.HasRows()) Then
                            myDR.Read()
                            tmpParamEmiPrede = ParamEmiFact.BuildParamEmiPrede(myDR)
                        Else
                            tmpParamEmiPrede = Nothing
                        End If
                    End Using
                End Using
            End Using
            Return tmpParamEmiPrede

        Catch ex As Exception
            Throw
        Finally
            tmpParamEmiPrede = Nothing
        End Try
    End Function

#End Region

End Class
